﻿using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using PmSoft;
using NPOI.OpenXmlFormats.Spreadsheet;

namespace ManagementApi.Services
{
    /// <summary>
    /// Excel导出列公共服务
    /// </summary>
    [UseDI(ServiceLifetime.Scoped)]
    public class ExportService
    {
        public void CellRange(ISheet sheet, IWorkbook workbook, int createRow, int createCell, string value1)
        {
            #region 第一列

            // 创建一个新的行
            IRow row_1 = sheet.CreateRow(createRow);
            ICell cell_1 = row_1.CreateCell(createCell);
            // 创建字体对象
            IFont font_1 = workbook.CreateFont();
            font_1.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            ICellStyle cellStyle_1 = workbook.CreateCellStyle();
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_1);
            cell_1.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_1.SetCellValue(value1);

            #endregion 第一列
        }

        public void CellRange(ISheet sheet, IWorkbook workbook, int createRow, int createCell, string value1, string value2)
        {
            #region 第一列

            // 创建一个新的行
            IRow row_1 = sheet.CreateRow(createRow);
            row_1.Height = 30 * 30;
            ICell cell_1 = row_1.CreateCell(createCell);
            // 创建字体对象
            IFont font_1 = workbook.CreateFont();
            font_1.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            ICellStyle cellStyle_1 = workbook.CreateCellStyle();
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_1);
            cell_1.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_1.SetCellValue(value1);

            #endregion 第一列

            #region 第二列

            // 创建一个新的行
            ICell cell_2 = row_1.CreateCell(createCell + 3);
            // 创建字体对象
            IFont font_2 = workbook.CreateFont();
            font_2.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            ICellStyle cellStyle_2 = workbook.CreateCellStyle();
            cellStyle_2.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_2.SetFont(font_2);
            cell_2.CellStyle = cellStyle_2;
            // 设置单元格的值
            cell_2.SetCellValue(value2);

            #endregion 第二列
        }

        public void CellRange(ISheet sheet, IWorkbook workbook, int createRow, int createCell, string value1, string value2, string value3)
        {
            #region 第一列

            // 创建一个新的行
            IRow row_1 = sheet.CreateRow(createRow);
            ICell cell_1 = row_1.CreateCell(createCell);
            // 创建字体对象
            IFont font_1 = workbook.CreateFont();
            font_1.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            ICellStyle cellStyle_1 = workbook.CreateCellStyle();
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_1);
            cell_1.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_1.SetCellValue(value1);

            #endregion 第一列

            #region 第二列

            // 创建一个新的行
            ICell cell_2 = row_1.CreateCell(createCell + 3);
            // 创建字体对象
            IFont font_2 = workbook.CreateFont();
            font_2.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            ICellStyle cellStyle_2 = workbook.CreateCellStyle();
            cellStyle_2.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_2.SetFont(font_2);
            cell_2.CellStyle = cellStyle_2;
            // 设置单元格的值
            cell_2.SetCellValue(value2);

            #endregion 第二列

            #region 第三列

            // 创建一个新的行
            ICell cell_3 = row_1.CreateCell(createCell + 6);
            // 创建字体对象
            IFont font_3 = workbook.CreateFont();
            font_3.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            ICellStyle cellStyle_3 = workbook.CreateCellStyle();
            cellStyle_3.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_3.SetFont(font_3);
            cell_3.CellStyle = cellStyle_3;
            // 设置单元格的值
            cell_3.SetCellValue(value3);

            #endregion 第三列
        }

        public void CellRange(ISheet sheet, IWorkbook workbook, int createRow, int createCell, string value1, string value2, string value3, string value4, string value5, string value6, string value7, string value8)
        {
            #region 第一列

            // 创建一个新的行
            IRow row_1 = sheet.CreateRow(createRow);
            row_1.Height = 25 * 25;
            ICell cell_1 = row_1.CreateCell(createCell);
            // 创建字体对象
            IFont font_1 = workbook.CreateFont();
            font_1.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            ICellStyle cellStyle_1 = workbook.CreateCellStyle();
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_1);
            cell_1.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_1.SetCellValue(value1);

            #endregion 第一列

            #region 第二列

            // 创建一个新的行
            ICell cell_2 = row_1.CreateCell(createCell + 1);
            // 创建字体对象
            IFont font_2 = workbook.CreateFont();
            font_2.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_2);
            cell_2.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_2.SetCellValue(value2);

            #endregion 第二列

            #region 第三列

            // 创建一个新的行
            ICell cell_3 = row_1.CreateCell(createCell + 2);
            // 创建字体对象
            IFont font_3 = workbook.CreateFont();
            font_3.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_3);
            cell_3.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_3.SetCellValue(value3);

            #endregion 第三列

            #region 第4列

            // 创建一个新的行
            ICell cell_4 = row_1.CreateCell(createCell + 3);
            // 创建字体对象
            IFont font_4 = workbook.CreateFont();
            font_4.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_4);
            cell_4.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_4.SetCellValue(value4);

            #endregion 第4列

            #region 第5列

            // 创建一个新的行
            ICell cell_5 = row_1.CreateCell(createCell + 4);
            // 创建字体对象
            IFont font_5 = workbook.CreateFont();
            font_5.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_5);
            cell_5.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_5.SetCellValue(value5);

            #endregion 第5列

            #region 第6列

            // 创建一个新的行
            ICell cell_6 = row_1.CreateCell(createCell + 5);
            // 创建字体对象
            IFont font_6 = workbook.CreateFont();
            font_6.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_6);
            cell_6.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_6.SetCellValue(value6);

            #endregion 第6列

            #region 第7列

            // 创建一个新的行
            ICell cell_7 = row_1.CreateCell(createCell + 6);
            // 创建字体对象
            IFont font_7 = workbook.CreateFont();
            font_7.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_7);

            // 设置边框样式和颜色
            cellStyle_1.BorderTop = BorderStyle.Thin;
            cellStyle_1.BorderBottom = BorderStyle.Thin;
            cellStyle_1.BorderLeft = BorderStyle.Thin;
            cellStyle_1.BorderRight = BorderStyle.Thin;
            cellStyle_1.TopBorderColor = IndexedColors.Black.Index;
            cellStyle_1.BottomBorderColor = IndexedColors.Black.Index;
            cellStyle_1.LeftBorderColor = IndexedColors.Black.Index;
            cellStyle_1.RightBorderColor = IndexedColors.Black.Index;

            cell_7.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_7.SetCellValue(value7);

            #endregion 第7列

            #region 第8列

            // 创建一个新的行
            ICell cell_8 = row_1.CreateCell(createCell + 7);
            // 创建字体对象
            IFont font_8 = workbook.CreateFont();
            font_8.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_8);
            cell_8.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_8.SetCellValue(value8);

            #endregion 第8列
        }

        public void CellRange(ISheet sheet, IWorkbook workbook, int createRow, int createCell, string value1, string value2, string value3, string value4, string value5)
        {
            #region 第一列

            // 创建一个新的行
            IRow row_1 = sheet.CreateRow(createRow);
            row_1.Height = 25 * 25;
            ICell cell_1 = row_1.CreateCell(createCell);
            // 创建字体对象
            IFont font_1 = workbook.CreateFont();
            font_1.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            ICellStyle cellStyle_1 = workbook.CreateCellStyle();
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_1);
            cell_1.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_1.SetCellValue(value1);

            #endregion 第一列

            #region 第二列

            // 创建一个新的行
            ICell cell_2 = row_1.CreateCell(createCell + 1);
            // 创建字体对象
            IFont font_2 = workbook.CreateFont();
            font_2.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_2);
            cell_2.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_2.SetCellValue(value2);

            #endregion 第二列

            #region 第三列

            // 创建一个新的行
            ICell cell_3 = row_1.CreateCell(createCell + 2);
            // 创建字体对象
            IFont font_3 = workbook.CreateFont();
            font_3.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_3);
            cell_3.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_3.SetCellValue(value3);

            #endregion 第三列

            #region 第4列

            // 创建一个新的行
            ICell cell_4 = row_1.CreateCell(createCell + 3);
            // 创建字体对象
            IFont font_4 = workbook.CreateFont();
            font_4.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_4);
            cell_4.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_4.SetCellValue(value4);

            #endregion 第4列

            #region 第5列

            // 创建一个新的行
            ICell cell_5 = row_1.CreateCell(createCell + 4);
            // 创建字体对象
            IFont font_5 = workbook.CreateFont();
            font_5.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_5);
            cell_5.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_5.SetCellValue(value5);

            #endregion 第5列

            // 设置边框样式和颜色
            cellStyle_1.BorderTop = BorderStyle.Thin;
            cellStyle_1.BorderBottom = BorderStyle.Thin;
            cellStyle_1.BorderLeft = BorderStyle.Thin;
            cellStyle_1.BorderRight = BorderStyle.Thin;
            cellStyle_1.TopBorderColor = IndexedColors.Black.Index;
            cellStyle_1.BottomBorderColor = IndexedColors.Black.Index;
            cellStyle_1.LeftBorderColor = IndexedColors.Black.Index;
            cellStyle_1.RightBorderColor = IndexedColors.Black.Index;
        }

        public void CellRange(ISheet sheet, IWorkbook workbook, int createRow, int createCell, string value1, string value2, string value3, string value4, string value5, string value6)
        {
            #region 第一列

            // 创建一个新的行
            IRow row_1 = sheet.CreateRow(createRow);
            row_1.Height = 25 * 25;
            ICell cell_1 = row_1.CreateCell(createCell);
            // 创建字体对象
            IFont font_1 = workbook.CreateFont();
            font_1.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            ICellStyle cellStyle_1 = workbook.CreateCellStyle();
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_1);
            cell_1.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_1.SetCellValue(value1);

            #endregion 第一列

            #region 第二列

            // 创建一个新的行
            ICell cell_2 = row_1.CreateCell(createCell + 1);
            // 创建字体对象
            IFont font_2 = workbook.CreateFont();
            font_2.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_2);
            cell_2.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_2.SetCellValue(value2);

            #endregion 第二列

            #region 第三列

            // 创建一个新的行
            ICell cell_3 = row_1.CreateCell(createCell + 2);
            // 创建字体对象
            IFont font_3 = workbook.CreateFont();
            font_3.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_3);
            cell_3.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_3.SetCellValue(value3);

            #endregion 第三列

            #region 第4列

            // 创建一个新的行
            ICell cell_4 = row_1.CreateCell(createCell + 3);
            // 创建字体对象
            IFont font_4 = workbook.CreateFont();
            font_4.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_4);
            cell_4.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_4.SetCellValue(value4);

            #endregion 第4列

            #region 第5列

            // 创建一个新的行
            ICell cell_5 = row_1.CreateCell(createCell + 4);
            // 创建字体对象
            IFont font_5 = workbook.CreateFont();
            font_5.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_5);
            cell_5.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_5.SetCellValue(value5);

            #endregion 第5列

            #region 第6列

            // 创建一个新的行
            ICell cell_6 = row_1.CreateCell(createCell + 5);
            // 创建字体对象
            IFont font_6 = workbook.CreateFont();
            font_6.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_6);
            cell_6.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_6.SetCellValue(value6);

            #endregion 第6列

            // 设置边框样式和颜色
            cellStyle_1.BorderTop = BorderStyle.Thin;
            cellStyle_1.BorderBottom = BorderStyle.Thin;
            cellStyle_1.BorderLeft = BorderStyle.Thin;
            cellStyle_1.BorderRight = BorderStyle.Thin;
            cellStyle_1.TopBorderColor = IndexedColors.Black.Index;
            cellStyle_1.BottomBorderColor = IndexedColors.Black.Index;
            cellStyle_1.LeftBorderColor = IndexedColors.Black.Index;
            cellStyle_1.RightBorderColor = IndexedColors.Black.Index;
        }

        public void CellRange(ISheet sheet, IWorkbook workbook, int createRow, int createCell, string value1, string value2, string value3, string value4, string value5, string value6, string value7)
        {
            #region 第一列

            // 创建一个新的行
            IRow row_1 = sheet.CreateRow(createRow);
            row_1.Height = 20 * 20;
            ICell cell_1 = row_1.CreateCell(createCell);
            // 创建字体对象
            IFont font_1 = workbook.CreateFont();
            font_1.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            ICellStyle cellStyle_1 = workbook.CreateCellStyle();
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_1);
            cell_1.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_1.SetCellValue(value1);

            #endregion 第一列

            #region 第二列

            // 创建一个新的行
            ICell cell_2 = row_1.CreateCell(createCell + 1);
            // 创建字体对象
            IFont font_2 = workbook.CreateFont();
            font_2.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_2);
            cell_2.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_2.SetCellValue(value2);

            #endregion 第二列

            #region 第三列

            // 创建一个新的行
            ICell cell_3 = row_1.CreateCell(createCell + 2);
            // 创建字体对象
            IFont font_3 = workbook.CreateFont();
            font_3.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_3);
            cell_3.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_3.SetCellValue(value3);

            #endregion 第三列

            #region 第4列

            // 创建一个新的行
            ICell cell_4 = row_1.CreateCell(createCell + 3);
            // 创建字体对象
            IFont font_4 = workbook.CreateFont();
            font_4.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_4);
            cell_4.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_4.SetCellValue(value4);

            #endregion 第4列

            #region 第5列

            // 创建一个新的行
            ICell cell_5 = row_1.CreateCell(createCell + 4);
            // 创建字体对象
            IFont font_5 = workbook.CreateFont();
            font_5.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_5);
            cell_5.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_5.SetCellValue(value5);

            #endregion 第5列

            #region 第6列

            // 创建一个新的行
            ICell cell_6 = row_1.CreateCell(createCell + 5);
            // 创建字体对象
            IFont font_6 = workbook.CreateFont();
            font_6.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_6);
            cell_6.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_6.SetCellValue(value6);

            #endregion 第6列

            #region 第7列

            // 创建一个新的行
            ICell cell_7 = row_1.CreateCell(createCell + 6);
            // 创建字体对象
            IFont font_7 = workbook.CreateFont();
            font_7.FontHeightInPoints = 12; // 设置字体大小为 12
            // 设置单元格样式
            cellStyle_1.Alignment = HorizontalAlignment.Left;//居中
            cellStyle_1.SetFont(font_7);

            // 设置边框样式和颜色
            cellStyle_1.BorderTop = BorderStyle.Thin;
            cellStyle_1.BorderBottom = BorderStyle.Thin;
            cellStyle_1.BorderLeft = BorderStyle.Thin;
            cellStyle_1.BorderRight = BorderStyle.Thin;
            cellStyle_1.TopBorderColor = IndexedColors.Black.Index;
            cellStyle_1.BottomBorderColor = IndexedColors.Black.Index;
            cellStyle_1.LeftBorderColor = IndexedColors.Black.Index;
            cellStyle_1.RightBorderColor = IndexedColors.Black.Index;

            cell_7.CellStyle = cellStyle_1;
            // 设置单元格的值
            cell_7.SetCellValue(value7);

            #endregion 第7列

        }

        /// <summary>
        /// 导出列
        /// </summary>
        /// <param name="sheet"></param>
        /// <param name="workbook"></param>
        /// <param name="createRow">创建初始行数</param>
        /// <param name="createCell">创建初始列数</param>
        /// <param name="span">间隔列数</param>
        /// <param name="values">写入数据</param>
        public void CellRange(ISheet sheet, IWorkbook workbook, int createRow, int createCell, int span, params string[] values)
        {
            IRow row = sheet.CreateRow(createRow);
            for (int i = 0; i < values.Length; i++)
            {
                //设置导出列
                ICell cell = row.CreateCell(createCell + (i * span) + i);
                IFont font = workbook.CreateFont();
                font.FontHeightInPoints = 12; // 设置字体大小为 12
                ICellStyle cellStyle = workbook.CreateCellStyle(); // 设置单元格样式
                cellStyle.Alignment = HorizontalAlignment.Left;//居中
                cellStyle.SetFont(font);
                cell.CellStyle = cellStyle;
                // 设置单元格的值
                cell.SetCellValue(values[i]);
            }
        }



        public void SetCellDropdownList(ISheet sheet, int firstcol, int lastcol, string[] vals)
        {
            //设置生成下拉框的行和列
            var cellRegions = new CellRangeAddressList(1, 65535, firstcol, lastcol);
            var helper = new XSSFDataValidationHelper((XSSFSheet)sheet);
            //设置 下拉框内容
            var constraint = helper.CreateExplicitListConstraint(vals);

            //绑定下拉框和作用区域，并设置错误提示信息
            //XSSFDataValidation dataValidate = new XSSFDataValidation(cellRegions, constraint);
           var dataValidate= helper.CreateValidation(constraint, cellRegions);
            dataValidate.CreateErrorBox("输入不合法", "请输入或选择下拉列表中的值。");
            dataValidate.ShowPromptBox = true;

            sheet.AddValidationData(dataValidate);
        }

        public void SetCellDropdownList(HSSFWorkbook workbook, ISheet sheet, string name, int firstcol, int lastcol, string[] vals, int sheetindex = 1)
        {
            //先创建一个Sheet专门用于存储下拉项的值
            ISheet sheet2 = workbook.CreateSheet(name);
            //隐藏
            workbook.SetSheetHidden(sheetindex, true);
            int index = 0;
            foreach (var item in vals)
            {
                sheet2.CreateRow(index).CreateCell(0).SetCellValue(item);
                index++;
            }
            //创建的下拉项的区域：
            var rangeName = name + "Range";
            IName range = workbook.CreateName();
            range.RefersToFormula = name + "!$A$1:$A$" + index;
            range.NameName = rangeName;
            CellRangeAddressList regions = new CellRangeAddressList(0, 65535, firstcol, lastcol);

            DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(rangeName);
            HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
            dataValidate.CreateErrorBox("输入不合法", "请输入或选择下拉列表中的值。");
            dataValidate.ShowPromptBox = true;
            sheet.AddValidationData(dataValidate);
        }
    }
}